package com.example.stuwork.dao;

import com.example.stuwork.pojo.Assignment;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 作业DAO接口
 */
@Mapper
public interface AssignmentDao {
    
    /**
     * 获取所有作业
     * 
     * @return 作业列表
     */
    List<Assignment> findAll();
    
    /**
     * 根据ID获取作业
     * 
     * @param assignmentId 作业ID
     * @return 作业对象
     */
    Assignment getById(Long assignmentId);
    
    /**
     * 根据课程ID和班级ID获取作业列表
     * 
     * @param courseId 课程ID
     * @param classId 班级ID
     * @return 作业列表
     */
    List<Assignment> findByCourseAndClass(@Param("courseId") String courseId, @Param("classId") Long classId);
    
    /**
     * 根据教师ID获取作业列表
     * 
     * @param teacherId 教师ID
     * @return 作业列表
     */
    List<Assignment> findByTeacherId(String teacherId);
    
    /**
     * 根据教师ID、课程ID和班级ID获取作业列表
     * 
     * @param teacherId 教师ID
     * @param courseId 课程ID
     * @param classId 班级ID
     * @return 作业列表
     */
    List<Assignment> findByTeacherAndCourseAndClass(
        @Param("teacherId") String teacherId, 
        @Param("courseId") String courseId, 
        @Param("classId") Long classId
    );
    
    /**
     * 获取即将截止的作业列表
     * 
     * @param days 天数
     * @return 作业列表
     */
    List<Assignment> findUpcomingDeadlines(@Param("days") int days);
    
    /**
     * 添加作业
     * 
     * @param assignment 作业对象
     * @return 影响的行数
     */
    int insert(Assignment assignment);
    
    /**
     * 更新作业
     * 
     * @param assignment 作业对象
     * @return 影响的行数
     */
    int update(Assignment assignment);
    
    /**
     * 删除作业
     * 
     * @param assignmentId 作业ID
     * @return 影响的行数
     */
    int delete(Long assignmentId);
    
    /**
     * 检查作业是否存在
     * 
     * @param courseId 课程ID
     * @param classId 班级ID
     * @param title 作业标题
     * @return 是否存在
     */
    boolean exists(@Param("courseId") String courseId, @Param("classId") Long classId, @Param("title") String title);
    
    /**
     * 获取班级中所有有效（未过期）的作业
     * 
     * @param classId 班级ID
     * @return 作业列表
     */
    List<Assignment> findActiveAssignmentsByClassId(@Param("classId") Long classId);
} 